package study.SCADA网关解析;

/**
 * @Author 刘伟涛
 * @Date 2024/8/13 16:54
 **/
public class 检验码计算02 {

    public static void main(String[] args) {
        // 定义十六进制数值的数组
        String hexValues = "31487C5C5E267C7C7C317C7C7C7C7C327C7C317C32303234303832393131313934300D03";

        // 去除所有的连字符
        hexValues = hexValues.replaceAll(" ", "").trim();
        // 获取两个字符作为一个字节
        String str = hexValues.substring(0,2);
        int cumulativeXor = Integer.parseInt(str, 16);

        for (int i = 2; i < hexValues.length(); i += 2) {
            // 获取两个字符作为一个字节
            str = hexValues.substring(i, i + 2);
            cumulativeXor += Integer.parseInt(str, 16);

        }

        cumulativeXor=cumulativeXor%256;
        // 将结果十进制转换为十六进制表示
        String finalHexXor = Integer.toHexString(cumulativeXor).toUpperCase();

        // 输出最终的结果
        System.out.println("最终的异或结果是: 0x" + finalHexXor);
    }

}
